package com.zhongwang.business.module.system.permission;

import com.zhongwang.business.gen.entity.Permission;
import com.zhongwang.business.gen.mapper.PermissionMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

import static com.zhongwang.business.constant.Constant.STATUS_NORMAL;


/**
 *  权限 服务
 *
 * @author China.sgl
 * @date 2019/12/6 08:42
 */
@Service
@Slf4j
public class PermissionService {

    @Autowired
    private PermissionMapper permissionMapper;
    @Autowired
    private PermissionDao permissionDao;

    /**
     * 查询帐户拥有权限
     *
     * @param id 帐户 id
     * @return List
     */
    public List<Permission> findPermissionsByUserId(Integer id) {
        return permissionDao.findPermissionsByUserId(id);
    }

    /**
     * 按条件查询所有权限
     *
     * @return List
     */
    public List<Permission> findPermissionAll(Permission permission) {
        return permissionDao.findPermissionAll(permission);
    }

    /**
     * 查询所有权限
     *
     * @return List
     */
    public List<PermissionModel> findAll() {
        return permissionDao.findAll();
    }

    /**
     * 修改权限
     *
     * @param permission 权限信息
     * @return 影响行数
     */
    public int updatePermission(Permission permission) {
        return permissionMapper.updateByPrimaryKeySelective(permission);
    }

    /**
     * 按权限码查询权限
     *
     * @param permissionName 权限码
     * @return 权限信息
     */
    public Permission findByPermissionName(String permissionName) {
        return permissionDao.findByPermissionName(permissionName);
    }

    /**
     * 保存权限信息
     *
     * @param menu 权限信息
     * @return 影响行数
     */
    public int savePermission(Permission menu) {
        menu.setStatus(STATUS_NORMAL);
        return permissionMapper.insert(menu);
    }

    /**
     * 查询角色所有权限，村识拥有权限
     *
     * @param id 角色 id
     * @return List
     */
    public List<PermissionModel> findPermissionCheckedByRoleId(Integer id) {
        List<PermissionModel> permissionModels = permissionDao.findAll();
        List<Permission> permissions = permissionDao.findPermissionsByRoleId(id);
        for (PermissionModel permissionModel : permissionModels) {
            for (Permission menu : permissions) {
                if (menu.getId().equals(permissionModel.getId())) {
                    permissionModel.setCheckFlag(true);
                    break;
                }
            }
        }
        return permissionModels;
    }

    /**
     * 根据ID查询权限
     * @param id id
     * @return 权限
     */
    public Permission getPermission(Integer id) {
        return permissionMapper.selectByPrimaryKey(id);
    }

    /**
     * 删除权限（假删除）， 如果包含子权限，同时删除子权限
     * @param permission 权限
     * @return 影响行数
     */
    @Transactional(rollbackFor = Exception.class)
    public int delPermission(Permission permission) {
        int row = permissionMapper.updateByPrimaryKeySelective(permission);
        permissionDao.updateByPid(permission.getId());
        return row;
    }
}
